package com.lesama.singleton;

// 懒汉模式： 使用前不创建，要使用时再创建
// 可能导致多线程下创建多个对象的情况，因此需要线程同步，同时双捡锁提高效率

public class SingletonDesignDemo2 {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    Singleton2 s = Singleton2.getInstance();
                    System.out.println(s);
                }
            }).start();
        }
    }
}

class Singleton2 {
    private Singleton2() {}

    private static Singleton2 s; // 使用前不创建，要使用时再创建

    public static Singleton2 getInstance() {
        // Double-checked locking
        if(s == null) {
            synchronized (Singleton2.class) {
                if(s == null) {
                    s = new Singleton2();
                }
            }
        }
        return s;
    }
}